#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
正常情况下，当我们定义了一个class，创建了一个class的实例后，我们可以给该实例绑定任何属性和方法，这就是动态语言的灵活性。
为了达到限制的目的，Python允许在定义class的时候，定义一个特殊的__slots__变量，来限制该class实例能添加的属性：
"""
from types import MethodType


class Student(object):
    pass


def set_age(self, age):
    self.age = age


def set_score(self, score):
    self.score = score


def main():
    s = Student()
    s.name = '王楠'
    print(s.name)
    s.set_age = MethodType(set_age, s)
    s.set_age(20)
    print(s.age)
    s2 = Student()
    # s2.set_age(16)  对实例s绑定的方法 s2无法使用
    Student.set_age = set_age
    s2.set_age(16)   # 对类Student绑定方法后 所有实例都可调用
    print(dir(Student))
    print(dir(s))
    print(s2)


if __name__ == '__main__':
    main()
